package com.nuanshui.heatedloan.order.integration.execute;

import com.nuanshui.heatedloan.order.integration.bean.OrderResult;
import com.nuanshui.heatedloan.order.integration.execute.handler.OrderHandler;
import com.nuanshui.heatedloan.order.integration.form.OrderExecuteForm;

import java.util.Map;

/**
 *
 * 订单的执行器
 * 订单的所有方法，都在这里定义了。
 *
 * 抽象的维度，是根据订单的类型，进行抽象。每一个类型的订单都有OrderExecute 定义的方法。
 * 一个默认的abstractOrderExecute 继承了OrderExecute. 里面提供一个一些默认的订单的方法。
 * 然后具体的业务类型的最终处理类，里面定义了一些各自的 方法的实现。
 * 如果要添加类型，则根据已有的订单处理类借鉴。
 * 如果要添加订单的方法，则在这里定义，然后如果所有的订单都可以公用，则在abstractOrderExecute 里面定义
 *
 * @Author: Gonzo
 * @Date 2017/3/23下午7:44
 * @since 1.4.2
 */
public interface OrderExecute {

	void setOrderHandler(OrderHandler handler);
	/**
	 * 生成订单
	 * @param form
	 * @return
	 */
	OrderResult placeOrderExecute(OrderExecuteForm form);

	/**
	 * 获取订单列表
	 * @Author: Gonzo
	 * @Date 2017/3/1714:20
	 * @since 1.4.2
	 */
	Map<String, Object> listAppointmentOrderExecute(OrderExecuteForm form);

	/**
	 * 获取订单详情
	 * @Author: Gonzo
	 * @Date 2017/3/1714:20
	 * @since 1.4.2
	 */
	Map<String, Object> getAppointmentOrderDetailExecute(String orderNum, String userId);

	/**
	 * 取消订单
	 * @Author: Gonzo
	 * @Date 2017/3/1714:20
	 * @since 1.4.2
	 */
	OrderResult cancelAppointmentOrderExecute(OrderExecuteForm form);

	/**
	 * 校验订单二维码
	 * @return
	 */
	OrderResult verifyAppointmentQrcodeExecute(OrderExecuteForm from);

	/**
	 * 订单超时未支付, 置为失效
	 * @Author: Gonzo
	 * @Date 2017/4/13上午9:58
	 * @since 1.4.2
	 */
	OrderResult overtimeOrder(OrderExecuteForm form);
	
    /**
	 * 预约订单超时未入场, 置为失效
     * @Author: Gonzo
     * @Date 2017/4/13上午9:58
     * @since 1.4.2
     */
	OrderResult expireOrder(OrderExecuteForm form);


	OrderResult paySuccess(OrderExecuteForm form);
}
